package models.common.bean;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;

import models.common.bean.InformationAssuranceBean.AuditResult;
import models.common.bean.InformationAssuranceBean.ManagementResult;

import common.constants.ConfConst;
import common.constants.Constants;
import common.utils.Security;


/**
 * 保证人承诺列表查询
 *@author LiangQiongfeng
 *@version 2018-1-21 下午7:02:42
 */
@Entity
public class GuarantorCommitment {
	

	@Id
	public long id;
	
	/**保证信息表id*/
	public long assurance_id;
	@Transient
	public String signId;
	public String getSignId(){
		return Security.addSign(this.assurance_id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
	@Transient
	public String signID;
	public String getSignID(){
		return Security.addSign(this.assurance_id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
	/**合同id*/
	public String contract_id;
	
	/**签署状态是否签字（默认没有签字）0未签字 1已签字*/
	public int is_sign;
	@Transient
	public String isSign ;
	public String getIsSign(){
		if(is_sign == 0){
			return "待签署";
		}
		return "已签署";
	}
	/**放款人id*/
	public long lender_id;
	
	/**保证人id*/
	public long user_id;
	
	/**放款人名字*/
	public String lender_name;
	
	/**授信申请表id*/
	public long credit_limit_id;
	
	/**授信申请人申请的额度*/
	public double request_limit;
	
	/**授信编号*/
	public String credit_granting_code;
	
	/**授信起始日期*/
	public Date start_time;
	
	/**授信截止日期*/
	public Date end_time;
	
	/**最高担保额度*/
	public double audit_amount;
	
	
	/**
	 * 

	t_information_assurance：保证信息表
	放款人lender_id
	放款人名称 lender_name
	授信申请表 credit_limit_id
	
	t_credit_limit：
	放款人supervisor_id
	申请最高担保额度（授信申请人向放款人申请的总额度request_limit，credit_limit_total）
	授信编号（credit_granting_code）
	授信起始（start_time）和终止日期（end_time）
	实际最高担保余额（放款人能够给与的最高额度，audit_amount）
	
	t_shareholder_sign 保证人签字表 利用shareholder_name 和 shareholder_mobile 查

	（保证信息表assurance_id，
	合同contract_id，
	签署状态is_sign）
		
	 */
	
	/** 授信申请记录签署方式 0 自动签署 1 面签' */
	public int is_pledge_management;
	
	/** 状态 0待签署 1已签署 2已失效 3已确认' */
	public int status;

	/** 状态 0待签署 1已签署 2已失效 3已确认' */
	public AuditResult getStatus() {
		AuditResult auditResult = AuditResult.getEnum(this.status);
		return auditResult;
	}

	public void setStatus(AuditResult auditResult) {
		this.status = auditResult.code;
	}

	public enum AuditResult {

		/** 待签署 */
		HAVE_NO_AUDIT(0, "待签署"),

		/** 已签署 */
		AUDIT_PASS(1, "已签署"),

		/** 已失效 */
		AUDIT_FAILED(2, "已失效"),

		/** 已失效 */
		AUDIT_SURE(3, "已确认");

		public int code;
		public String value;

		private AuditResult(int code, String value) {
			this.code = code;
			this.value = value;
		}

		/**
		 * 根据code取得会员类型,没有找到返回null
		 * 
		 * @description
		 * @return
		 */
		public static AuditResult getEnum(int code) {
			AuditResult[] memberTypes = AuditResult.values();
			for (AuditResult memberType : memberTypes) {
				if (memberType.code == code) {

					return memberType;
				}
			}

			return HAVE_NO_AUDIT;
		}
	}
	
	/** 签署方式  0 自动签署 1面签*/
	public ManagementResult getIs_pledge_management() {
		ManagementResult managementResult = ManagementResult.getEnum(this.is_pledge_management);
		return managementResult;
	}

	public void setIs_pledge_management(AuditResult auditResult) {
		this.is_pledge_management = auditResult.code;
	}

	public enum ManagementResult {

		/** 自动签署 */
		HAVE_NO_AUDIT(0, "自动签署"),

		/** 面签 */
		AUDIT_PASS(1, "面签");

		public int code;
		public String value;

		private ManagementResult(int code, String value) {
			this.code = code;
			this.value = value;
		}

		/**
		 * 根据code取得会员类型,没有找到返回null
		 * 
		 * @description
		 * @return
		 */
		public static ManagementResult getEnum(int code) {
			ManagementResult[] memberTypes = ManagementResult.values();
			for (ManagementResult memberType : memberTypes) {
				if (memberType.code == code) {

					return memberType;
				}
			}

			return HAVE_NO_AUDIT;
		}
	}
}
